#ifndef LINEAR_LIST_H 
#define LINEAR_LIST_H
#endif 

#include <iostream>
using namespace std;
#include<cstddef>

class sequenceList{
private:
    float* myList;
    int curNumberOfItem;
    int maxCapacity;

public:
    sequenceList(const int& capacity, const int& size, float arr[]);
    ~sequenceList();
    bool addItem(const float& elem);
    bool insertItem(const int& index, const float& elem);
    int deleteItem(const float& elem);
    bool locate(const int& index, float& val);
    int locate(const float& val);
    void reverse();
    void print();
};//顺序表定义

class linkList;

class listNode{
    friend class linkList;
    friend void merge(linkList&alist, linkList&blist);

private:
    float data;
    listNode* next;
    
public:
    listNode();
    listNode(float nodeData, listNode* succ);
    ~listNode();
};//结点定义

class linkList
{
private:
    listNode* firstNode;//头指针，指向头结点（不含元素）
    listNode* curNode;
    listNode* lastNode;//尾指针，用于指向最后一个结点

    int listSize;

public:
    friend void merge(linkList& alist, linkList& blist);
    linkList();
    linkList(const int& size, float arr[]);
    ~linkList();
    bool headInsertItem(const float& elem);
    bool tailInsertItem(const float& elem);
    int insertItem(const int& index, const float& elem);
    int deleteItem(const float& val);
    bool locate(const int& index, float& val);
    int locate(const float& val);
    void ascendingOrder();
    void reverse();
    void print();
    
};//链表定义

void merge(linkList& alist, linkList& blist);

